'''
http://pymolwiki.org/index.php/save_settings

(c) 2011 Thomas Holder, MPI for Developmental Biology

License: BSD-2-Clause
'''

from __future__ import print_function

from pymol import cmd, CmdException


def save_settings(filename='~/.pymolrc-settings.py', quiet=1):
    '''
DESCRIPTION

    Dumps all settings with non-default values to ~/.pymolrc-settings.py

    Feature Request: Save settings for later use - ID: 1009951
    https://sourceforge.net/tracker/?func=detail&aid=1009951&group_id=4546&atid=354546
    '''
    from pymol.setting import get_name_list
    quiet = int(quiet)
    if not filename.endswith('.py'):
        print('Warning: filename should end with ".py"')
    # temporatily load default settings and remember them
    cmd.reinitialize('store_defaults')
    cmd.reinitialize('original_settings')
    original = [(name, cmd.get(name)) for name in get_name_list()]
    cmd.reinitialize('settings')
    # dump to file
    filename = cmd.exp_path(filename)
    f = open(filename, 'w')
    print('# AUTOGENERATED FILE', file=f)
    print('from pymol import cmd, invocation', file=f)
    print('if invocation.options.show_splash:', end=' ', file=f)  # no newline
    print('    print("Loading settings from", ' + repr(filename) + ')', file=f)
    count = 0
    for name, o_value in original:
        value = cmd.get(name)
        if value != o_value:
            print('cmd.set("%s", %s)' % (name, repr(value)), file=f)
            if not quiet:
                print('set %s, %s ;# default: %s' % (name, value, o_value))
            count += 1
    f.close()
    if not quiet:
        print('Dumped %d settings to %s' % (count, filename))

cmd.extend('save_settings', save_settings)

# vi:expandtab:smarttab
